A filesystem is a data structure (or set of data structures) and associated logic that facilitate tasks related to storing data in a computer system: allocating and freeing storage space on mass storage devices; reading and writing data; creating, modifying and deleting files; maintaining hierarchical directory structures; and so forth. Filesystem data structures are typically fairly complex, with interdependent fields that must be maintained consistently to avoid data corruption or loss. Various techniques and protocols to maintain filesystem consistency despite hardware errors and failures, power loss, and similar exigencies are known in the art. For example, several mass storage devices such as hard disk drives can be combined into a Redundant Array of Independent Disks (“RAID”) and operated so that the failure of any single device will not affect the availability of data stored on the RAID. This addresses the low-level need for reliable storage of data bits, including the data bits that make up the filesystem data structures. At a higher logical level, filesystem changes can be made robustly by, for example, preparing a tentative set of changes, then activating all the tentative changes simultaneously with a single, atomic “commit” operation. This can help avoid inconsistencies that might arise if several related data structure changes are involved in a filesystem operation, but the system or storage units fail partway through the sequence.
Filesystems and their underlying mass storage systems are usually controlled by a single computing system, such as a file server or a block-based storage server. Data caching, consistency, and coordination issues make it difficult or impossible in the general case to permit two independent systems to modify a filesystem simultaneously. Consequently, the single system (e.g., file server) can become a bottleneck in serving file operation requests from clients: it may saturate its communication resources for receiving requests and sending responses to clients; it may exhaust its processing or memory resources for performing the requested operations; or it may reach the capacity of the interface(s) over which it exchanges data with the mass storage devices. In a large-capacity storage system, this last resource is quite likely to be used up at some point, because disks can be added at will to increase the amount of storage available. Eventually, the aggregate data transfer bandwidth of all of the disks will exceed that of the controlling system.
Methods of making use of the bandwidth of a large cluster of mass storage devices, and of permitting at least some filesystem operational load to be moved from the main controlling system, may be of significant value in the field.